package com.redpack.redpost.util.Servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
//import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.struts.upload.FormFile;

//import sun.net.ftp.FtpClient;

import com.redpack.redpost.util.dao.*;
import com.redpack.redpost.util.to.*;

/**
 * Servlet implementation class UploadFileArribo
 */
//@WebServlet("/redpost/administrador/UploadFileArribo")
public class UploadFileArribo extends HttpServlet  implements javax.servlet.Servlet{
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UploadFileArribo() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
   
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request, response); 
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		String respuesta = "";
		String cve_arribo = "";
		String cve_tipo_archivo = "";
		//String fileName = "";
		/*
        respuesta = "Tipo";
        respuesta += "/";
        respuesta += "12.12";
        respuesta += "/";
        respuesta += "Origen";
        respuesta += "/";
        */
        //respuesta += request.getParameter("filename");
        
		cve_arribo = request.getParameter("cve_arribo");
		cve_tipo_archivo = request.getParameter("cve_tipo_archivo");
		
		try 
		{
        
		if(isNumeric(cve_arribo) && isNumeric(cve_tipo_archivo))
		{
	        InputStream is = null;
	        FileItemFactory factory = new DiskFileItemFactory();
	        ServletFileUpload upload = new ServletFileUpload(factory);
	        java.util.List items =  upload.parseRequest(request);
	        String fileName = "";
	        boolean isUploadFtp = false;
	        boolean status = false;
	        boolean isSaveBd = false;
	        String Html = ""; 
	        String UrlFtp = "";
	        String fileExtension = "";
	        
	        java.util.Iterator iter = items.iterator();
	        while (iter.hasNext()) {
	          FileItem item = (FileItem) iter.next();
	
	          if (!item.isFormField()) {
	        	  is = item.getInputStream();
	        	  
	        	  //fileName = item.getName();
	        	  //jpg|png|jpeg|gif|pdf
	        	  if (item.getName().toLowerCase().endsWith(".jpg")) {
	                  fileExtension = ".jpg";
	              }
	        	  if (item.getName().toLowerCase().endsWith(".png")) {
	                  fileExtension = ".png";
	              }
	        	  if (item.getName().toLowerCase().endsWith(".jpeg")) {
	                  fileExtension = ".jpeg";
	              }
	        	  if (item.getName().toLowerCase().endsWith(".gif")) {
	                  fileExtension = ".gif";
	              }
	        	  if (item.getName().toLowerCase().endsWith(".pdf")) {
	                  fileExtension = ".pdf";
	              }
	
	        	  
	                String root = getServletContext().getRealPath("/");
		    		root = root.replaceFirst(".\\\\tmp\\\\", "") ;
		    		int indice = root.indexOf("tmp") ;
		    		String nr = root.substring(0, indice) ;
		    		nr = nr + "Multimedia.war" ;
		    		
	              File path = new File(nr);
	              if (!path.exists()) {
	                  status = path.mkdirs();
	              }
	              
	             
	              String IdFile = "";
	
	              Date date = new Date(); // your date
	              Calendar cal = Calendar.getInstance();
	              cal.setTime(date);
	              int year = cal.get(Calendar.YEAR);
	              int month = cal.get(Calendar.MONTH);
	              int day = cal.get(Calendar.DAY_OF_MONTH);
	              int min = cal.get(Calendar.MINUTE);
	              int seg = cal.get(Calendar.SECOND);
	              int milseg = cal.get(Calendar.MILLISECOND);
	              
	                  
	              IdFile += "ArchArribo_" + cve_arribo + "_";
	              IdFile += Integer.toString(year);
	              IdFile += Integer.toString(month);
	              IdFile += Integer.toString(day);
	              IdFile += Integer.toString(min);
	              IdFile += Integer.toString(seg);
	              IdFile += Integer.toString(milseg) + fileExtension;
	              
	              
//	              File uploadedFile = new File(path + "/" + IdFile);
//	              item.write(uploadedFile);
//	              
//	              SampleFTPClient ftpClient = new SampleFTPClient();
//	              
//	             
//	              
//	              ftpClient.setUser(ConstantesRedpost.User); // set username here
//	              ftpClient.setPassword(ConstantesRedpost.Password); // set password here
//	              ftpClient.setHost(ConstantesRedpost.Host); // set host ip here
//	              UrlFtp = ConstantesRedpost.UrlFtpArribo;
//	              
//	              ftpClient.setRemoteFile(IdFile); 
	              // set name of the file
	              // to be downloaded
	              
	              FileItem firstLocalFile = item;
		    		
//		    		String root = getServlet().getServletContext().getRealPath("") ;
//		    		root = root.replaceFirst(".\\\\tmp\\\\", "") ;
//		    		int indice = root.indexOf("tmp") ;
//		    		String nr = root.substring(0, indice) ;
//		    		nr = nr + "Multimedia.war\\userload" ;
//		    		
//		    		System.out.println("Ruta== " + nr ) ;
		            
		            File uploadedFile = new File(path + "/" + IdFile) ;
		            uploadedFile.createNewFile( ) ;
		            
		            FileOutputStream fos = new FileOutputStream(uploadedFile);
		            
		            byte[] contentInBytes = firstLocalFile.get() ; // content.getBytes();
		            
			        fos.write(contentInBytes);
			        fos.flush();
			        fos.close();
	              
			        isSaveBd = true;
	              
	              
//	              boolean isConnected = ftpClient.connect();
	              if (isSaveBd)
	              {
	              	//ftpClient.upload("C:\Users\JC\Pictures\antiguedades\548_148745411955032_1333437740_n.jpg");
	            	  //isUploadFtp = ftpClient.upload(uploadedFile.getAbsoluteFile().toString());// set name of the file to
//	            	  isUploadFtp = ftpClient.upload(uploadedFile.getAbsoluteFile().toString());
	            	  
	            	  if(isSaveBd)
	            	  {
	            		  //1 = Factura
	            		  if(Integer.parseInt(cve_tipo_archivo) == 1)
	            		  {
	            			  
	            			  ArchivoArribo _ArchivoArribo = new ArchivoArribo(Integer.parseInt(cve_arribo),IdFile,1);
	            			  isSaveBd =ArriboAdminDao.saveArchivoArribo(_ArchivoArribo);
	            			  ArriboAdminDao.cambiaStatus( Integer.parseInt(cve_arribo) , 7 );
	            		  }
	            		  //2 = FotografiaPaquete
	            		  if(Integer.parseInt(cve_tipo_archivo) == 2)
	            		  {
	            			  ArchivoArribo _ArchivoArribo = new ArchivoArribo(Integer.parseInt(cve_arribo),IdFile,2);
	            			  isSaveBd = ArriboAdminDao.saveArchivoArribo(_ArchivoArribo);
	            		  }
	            		  
	            		  if(isSaveBd)
	            		  {
	            			  List _ArchivoArribo = new ArrayList(); 
	            			  _ArchivoArribo = ArriboAdminDao.getArchivoArribo(Integer.parseInt(cve_arribo),Integer.parseInt(cve_tipo_archivo));
	            	
	            			  	
	            			  Html +="<table id='tblArchivosFactArribo' class='table_datosRed'>";
	      		        	  Html +="<thead>";
	      		        	  Html +="<tr>";
	      		        	  Html +="<th>Id Archivo</th>";
	      		        	  Html +="<th>Nombre</th>";
	      		        	  Html +="<th>Ver</th>";
	      		        	  Html +="<th>Eliminar</th>";
	      		        	  Html +="</tr>";     
	      		        	  Html +="</thead>";
	      		        	  Html +="<tbody>";  
	      		        	
	            			  java.util.Iterator iter2 = _ArchivoArribo.iterator();
	            		        while (iter2.hasNext()) {
	            		        	ArchivoArribo _item = (ArchivoArribo) iter2.next();
	
	            		        	String _ruta = UrlFtp + _item.getNom_archivo();
	                				Html +="<tr class='body_table'>";
	        	        			Html +="<td>"+_item.getCve_Archivo()+"</td>";
	            		        	Html +="<td>"+_item.getNom_archivo()+"</td>";
	            		        	//Html +="<td><img   src='../img/ico_consultaFact.png'  onclick=VerArchivoArribo("+_item.getNom_archivo()+") /></td>";
	            		        	Html +="<td><a href='"+ConstantesRedpost.UrlFtpServer+_item.getNom_archivo()+"' TARGET='_new'  ><img   src='../img/ico_consultaFact.png'  /></a></td>";
	            		        	Html +="<td><img   src='../img/icoError.png'  onclick='EliminarArchivoArribo("+_item.getCve_Archivo()+","+_item.getCve_arribo()+",$(this))' /></td>";
	            		        	Html +="</tr>";
	            		        	
	            		        	
	            		        }
	            		        
	            		        Html +="</tbody>";
	        		        	Html +="</table>";
	            		  }
	            		  respuesta = Html;
	            	  }
	              }
	              
	          }
        }

		}
		
	 } catch (Exception ex) {
         ex.printStackTrace();
         response.getWriter().write(ex.toString());  
         respuesta = ex.toString();
         //System.out.println(ex);
     }
        response.getWriter().write(respuesta);  
	}
	
	
	public class SampleFTPClient {

		private java.net.URLConnection client;

	    private String host;

	    private String username;

	    private String password;

	    private String remoteFile;

	    public void setHost(String host) {
	        this.host = host;
	    }

	    public void setUser(String user) {
	        this.username = user;
	    }

	    public void setPassword(String p) {
	        this.password = p;
	    }

	    public void setRemoteFile(String d) {
	        this.remoteFile = d;
	    }

	   
	    /**
	     * method to upload the file
	     *
	     * @param localfilename
	     * @return
	     */
	    public synchronized boolean upload(String localfilename) {
	        try {

	            //InputStream is = new FileInputStream("C:\\Users\\Codice\\Pictures\\553250_502218429835109_1499822884_n.jpg");
	        	InputStream is = new FileInputStream(localfilename);
	            BufferedInputStream bis = new BufferedInputStream(is);
	            java.io.OutputStream os = client.getOutputStream();
	            BufferedOutputStream bos = new BufferedOutputStream(os);
	            byte[] buffer = new byte[1024];
	            int readCount;

	            while ((readCount = bis.read(buffer)) > 0) {
	                bos.write(buffer, 0, readCount);
	            }
	            bos.close();
	        	

	            System.out.println("Successfully uploaded");

	            return true;
	        } catch (Exception ex) {
	            ex.printStackTrace();
	            //System.out.println(ex);
	            return false;
	        }
	    }
	    
	    /**
	     * Used to connect to ftp server
	     *
	     * @return
	     */
	    public synchronized boolean connect() {
	        try {

	            URL url = new URL("ftp://" + username + ":" + password + "@" + host + "/" + remoteFile + ";type=i");
	            client = url.openConnection();
	            //System.out.println("Successfully connected");
	            return true;

	        } catch (Exception e) {
	            e.printStackTrace();
	            return false;
	        }
	    }

	    
	    
	}
	
	
	private static boolean isNumeric(String cadena){
	    try 
	    {
		    Integer.parseInt(cadena);
		    return true;
	    } 
	    catch (NumberFormatException nfe){
	    	return false;
	    }
	    
	}
}




